package 基础语法;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.Map.Entry;

public class 不可变集合 {
    public static void main(String[] args) {
        List<String> list = List.of("aa", "bb");
        // list.add("null");//报错
        // list.remove(0);//报错

        // Set<String> set=Set.of("null","aa","aa");//会报错，必须唯一
        Set<String> set = Set.of("null", "aa");

        Map<String, String> map = Map.of("key1", "value1", "key2", "value2");// 键重复会报错。这个of方法用的不是可变参数，最多串20个参数
        System.out.println(map);


        HashMap<String,String> hashMap=new HashMap<>();
        hashMap.put("k1", "v1");
        hashMap.put("k2", "v2");
        hashMap.put("k3", "v3");

        Map<String,String> map2=Map.copyOf(hashMap);//jdk10之后

        Map<String,String> map3=Map.ofEntries(hashMap.entrySet().toArray(new Map.Entry[0]));//这个数组长度是期望得长度，如果发现比较小，会自带再创建一个
        System.out.println(map3);
        
        //不知道为啥报错

        TestClass[] testClasses = new TestClass[] { new TestClass("key1","value1"),new TestClass("key2","value2") };
        Map<String, String> map1 = Map.ofEntries(testClasses);// 这个没有数量限制
        System.out.println(map1);

    }

}

class TestClass<K,V> implements Entry<K, V> {// 应该限制类型<String,String>
    K key;
    V value;
    TestClass(K k,V v){
        this.key=k;
        this.value=v;

    }
    @Override
    public K getKey() {
      return key;
    }
    @Override
    public V getValue() {
       return  value;
    }
    @Override
    public V setValue(V value) {
       this.value=value;
       return value;

    }

   

}
